#ifndef FIFO_H_
#define FIFO_H_

#include <unistd.h>
#include <string>
#include <sys/stat.h>
#include <fcntl.h>

class Fifo {

private:
		std::string nombre;
		int fileDes;
		bool esLectura;
		bool keepOpen;

public:

		/**
		 * nombre: nombre del archivo del FIFO
		 * keepOpen: reabrir el fifo en caso de que se cierre
		 */
		Fifo ( const char* nombre, bool keepOpen = false );

		virtual ~Fifo();

		/* Es bloqueante si el fifo esta cerrado
		 * devuelve la cantidad de bytes escritos */
		int escribir ( const char* dato,int datoSize );

		/* Es bloquenate si el fifo esta cerrado
		 * devuelve la cantidad de bytes leidos */
		int leer ( char* buffer, int buffSize );

		/**
		 * si el fifo esta abierto lo cierra.. sino no hace nada
		 *
		 */
		void cerrar (bool needUnlink = true);

		/*
		 * si el fifo esta cerrado lo abre.. sino no hace nada
		 * Es bloqueante hasta que alguien abra el fifo en el modo contrario
		 */
		void abrir (bool esLectura);

		/**
		 * Devuelve true si el fifo existe. false en otro caso
		 */
		static bool exists(const char* nombre);


};

#endif /* FIFO_H_ */

